namespace ne {
    export class Proxy {
        /**当前模块*/
        private _module: Module;
        /**
         * 
         * @param $module
         */
        constructor($module: Module) {
            this._module = $module;
        }

        /**
         * 获取Proxy注册的事件列表
         * @return 返回Proxy注册的事件集
         *
         */
        registerEvents(): { new(): ModuleEvent }[] {
            return null;
        }

        /**
         * 获取Proxy注册的事件列表
         * @return 返回Proxy注册的事件集
         *
         */
        registerStringEvents(): string[] {
            return null;
        }

        /**获取类*/
        getClass(): { new(module: Module): Proxy } {
            return this['constructor'] as { new(module: Module): Proxy };
        }

        /**获取代理所属模块*/
        getModule(): Module {
            return this._module;
        }

        /**
         * 接收事件 子类重写此类
         * @param $event
         *
         */
        receivedEvents($event: ModuleEvent): void { }

        /**
         * 接收事件 子类重写此类
         * @param $event
         *
         */
        receivedStringEvents($event: string, $eventdata: any): void { }

        /**启动事件,一个代理中可能有N种事件 */
        startEvents(): void {
            let _events_mods = this.registerEvents();
            if (_events_mods != null) {
                for (let i = 0, l = _events_mods.length; i < l; i++) {
                    let _eventVo: EventVo = new EventVo();
                    _eventVo.proxy = this;
                    _eventVo.eventClass = _events_mods[i];
                    EventManager.registerEvent(_eventVo);
                }
            }
            let _events_str = this.registerStringEvents();
            if (_events_str != null) {
                for (let i = 0, l = _events_str.length; i < l; i++) {
                    let _eventVo: EventVo = new EventVo();
                    _eventVo.proxy = this;
                    _eventVo.eventString = _events_str[i]
                    EventManager.registerStringEvent(_eventVo);
                }
            }
        }

        /**
         * 发送事件
         * @param $event
         *
         */
        dispatchModuleEvent($event: ModuleEvent): void {
            EventManager.dispatchModuleEvent($event);
        }

        /**
         * 发送事件
         * @param $event
         *
         */
        dispatchStringEvent($event: string, $eveutusr?: any): void {
            EventManager.dispatchStringEvent($event, $eveutusr);
        }

        dispatchNull(params:any[]){
            
        }
    }
}